package com.demo.designmode.builder.case2;

import com.demo.designmode.builder.case1.User;

import java.util.UUID;

/**
 * 使用建造者模式
 * @author jiaxXM
 * @date 2024/9/19
 */
public class Test1 {

    /**
     * 构造者模式的缺点还是有的
     * 1.代码冗长。如果一个对象的属性很多，那我们在创建一个对象时，链式就会变得很长，但是这也没有办法，
     * 无论采用构造器还是builder模式都会很长。如果非要变得简洁一点，那就只有采用原型模式(克隆)等其他方式了。
     * 2.会产生很多Builder类。我们可以放在一个包下统一管理应该问题不大。 第二个缺点实际上可以使用Lombok插件，然后在实体类上使用@Builder注解，
     * 就不会产生过多的Builder类了。但是有些公司的技术总监不太建议使用Lombok，那就莫得办法了...
     *
     * 注意点:
     * 有很多博客的示范代码，Builder类的addXXX方法会写成setXXX方法，这是一个隐患。因为很多框架，
     * 对Setter方法比较敏感，往往会对Setter方法做一些处理，所以Builder类里的设置属性值方法尽量不要用setXXX命名，防止出现一些不明原因的错误。
     * @param args
     * @throws Exception
     */

    public static void main(String[] args) throws Exception {
        String id = UUID.randomUUID().toString().replaceAll("-", "");
        User user = UserBuilder.getInstance()
                .newPojo()
                .addId(id)
                .addName("张三")
                .addGender("男")
                .addAge(20)
                .addPhone("135461852xx")
                .addAddress("广州天河")
                .build();
    }
}
